# 模块：一个py文件
# 目的：一个模块中可以定义函数，类，变量，通过导入模块的方式，可以在其他文件中使用该模块中的内容
# 使用导入模块的方式：import模块
# 当导入一个模块后，没有缩进的代码都会被执行一遍
# 模块命名有要求，必须符合合法的标识符的命名规则：
#          数字、字母、下划线组成
#          不能以数字开头
#          不能包含空格等特殊字符。

import common#导入一个模块
print (common.PI)
#使用该模块的变量：模块名.变量
common.AnimalO.speakO#使用模块中的方法
import math # python定义好的模块
print (math.pi)
print(math.pow(10,5))
import common as c#给这个模块起别名
print(c.PI)
# 模块名.变量
c.AnimalO.speakO
from common import Animal #从模块中导入Animal类
from commonimportis_primeasabc#从模块中导入is_prime函数，并且起一个别名
a=AnimalO#不用使用模块名调用，直接调用
a.speakO
print(abc(97))

# 包：普通的文件夹中放一个__init_.py，这个文件夹就是一个包。
# 目的：其他模块可以调用包
# init_.py：主要用于包的初始化、控制导入行为以及简化模块调用。
# 导入其他文件下的模块

import day08.Demo
from dayO8.Demo import Anima
#
# 判断是当前模块执行还是导入后执行

# 开发人员想要在模块的下方添加一些测试代码测试功能，使得其导入到其他模块中不执行，只是当前文件执行时才执行
# 使用.__name__属性判断，它是python的内置属性
# 如果被其他文件导入，__name__的值就是属性名
# 如果是当前文件执行，__name__的值为__main
###导包的时候不执行，只在执行当前文件时执行
print("当前模块的名字:",__name__)
#如果作为入口文件执行的，__name__ __main__
#如果是其他模块导入的方式执行的，__name__当前文件名
if __name__ =='__main__':
    a= Animal()
    a.speakO
    for i in range(2,101):
        print(is_prime(i))
